using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ClickLand.Web.UI.WebControls
{
	/// <summary>Control que hereda del RegularExpressionValidator y es utilizado dentro del ClickLandExTexbox.</summary>
	/// <remarks>No esta pensado para su uso externo a ClickLandExTextbox.</remarks>
	[DefaultProperty("Text"), ToolboxItem(false)]
	public class RegularValidator : RegularExpressionValidator
	{
		/// <summary>Inicializa una nueva instancia del Validador de expresiones regulares <see cref="RegularValidator"/> class.</summary>
		/// <param name="textbox">The textbox.</param>
		public RegularValidator(ClickLandExTextBox textbox) : base()
		{
			TextBox = textbox;
		}

		private ClickLandExTextBox m_TextBox = null;

		/// <summary>Asigna u obtiene el textbox.</summary>
		/// <value>El textbox.</value>
		internal ClickLandExTextBox TextBox
		{
			get { return m_TextBox; }
			set
			{
				m_TextBox = value;
				this.ID = value.ID + @"_RegVal";
				ControlToValidate = value.ID;
			}
		}

		/// <summary>Obtiene o asigna el valor que indica si de esta renderizando en el cliente.</summary>
		/// <value><c>true</c> si se esta renderizando con el proveedor de alerta, <c>false</c> en cualquier otro caso.</value>
		public bool RenderDesignModeErrorProvider
		{
			get
			{
				if(ViewState[@"RenderDesignModeErrorProvider"] == null) { ViewState[@"RenderDesignModeErrorProvider"] = true; }
				return (bool)ViewState[@"RenderDesignModeErrorProvider"];
			}
			set { ViewState[@"RenderDesignModeErrorProvider"] = value; }
		}

		/// <summary>Muestra el control en el cliente.</summary>
		/// <param name="writer">un objeto <see cref="T:System.Web.UI.HtmlTextWriter"></see> que contiene el flujo de salida en html.</param>
		protected override void Render(HtmlTextWriter writer)
		{
			if(TextBox.ErrorProvider == ErrorProviderType.Text)
			{
				base.Render(writer);
			}
			else
			{
				if(!TextBox.IsDesignMode || (TextBox.IsDesignMode && RenderDesignModeErrorProvider))
				{
					string src = string.Empty;
					if(TextBox.ErrorProvider == ErrorProviderType.StillIcon)
					{
						src = TextBox.Page.ClientScript.GetWebResourceUrl(TextBox.GetType(), @"ClickLand.Web.UI.WebControls.Recursos.errorprovider.gif");
					}
					else if(TextBox.ErrorProvider == ErrorProviderType.AnimatedIcon)
					{
						src = TextBox.Page.ClientScript.GetWebResourceUrl(TextBox.GetType(), @"ClickLand.Web.UI.WebControls.Recursos.errorprovider_anim.gif");
					}
					Text = "&nbsp;<img src=\"" + src + "\" alt=\"" + ErrorMessage + "\" title=\"" + ErrorMessage + "\"/>";
					base.Render(writer);
				}
			}
		}
	}
}
